package org.example.entity;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class DateTimeUtils {
    /**
     * 根据统计类型获取周期开始时间
     * @param statType 统计类型：month/quarter/year
     * @param endTime 周期结束时间（默认当前时间）
     * @return 周期开始时间
     */
    public static LocalDateTime getStartTimeByStatType(String statType, LocalDateTime endTime) {
        switch (statType) {
            case "month":
                // 月度统计：开始时间为当月1号0点
                return endTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
            case "quarter":
                // 季度统计：开始时间为当季度1号0点（如Q3→7月1号）
                int quarter = (endTime.getMonthValue() - 1) / 3 + 1;
                int startMonth = (quarter - 1) * 3 + 1;
                return endTime.withMonth(startMonth).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
            case "year":
                // 年度统计：开始时间为当年1月1号0点
                return endTime.withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
            default:
                return endTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
        }
    }

    /**
     * 计算两个时间之间的天数差
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 天数差
     */
    public static long calculateDaysBetween(LocalDateTime startTime, LocalDateTime endTime) {
        // 确保开始时间不晚于结束时间
        if (startTime.isAfter(endTime)) {
            LocalDateTime temp = startTime;
            startTime = endTime;
            endTime = temp;
        }
        return ChronoUnit.DAYS.between(startTime, endTime);
    }
}